
// 用户权限控制思路:
//1.登陆获取用户权限列表( 用字符串,数字作为权限标识 )
//2.立即保存权限列表到pinia
//3.从本地异步路由表中过滤出 当前用户有权限访问的路由 
//4.将当前用户有权限访问的路由 动态添加到固定路由表中,形成最终路由表(用户最终可以访问的路由)

//过滤出用户有权限访问的路由
//参数一: asyncRoutes 本地异步路由表( 完整路由表 )
//参数二: roles 用户的权限列表
function filterRoutes( asyncRoutes, roles ){
    //先对原有完整路由表 进行深拷贝
    // asyncRoutes = JSON.parse( JSON.stringify( asyncRoutes ) )
    var accessRoutes = asyncRoutes.filter((route)=>{
        //判断route这个路由对象 是否在roles这个权限列表中
        if( hasPermission( route , roles ) ){ //route路由对象 有权限
            if( route.children && route.children.length != 0 ){ //route路由对象有子路由
                route.children = filterRoutes( route.children , roles ) //过滤出子路由中有权限的路由
            }
            return true;
        }else{
            return false;
        }
    })
    return accessRoutes;
}

// function filterRoutes( asyncRoutes, roles ){
//     //先对原有完整路由表 进行深拷贝
//     asyncRoutes = JSON.parse( JSON.stringify( asyncRoutes ) )
//     var accessRoutes = [] 
//     asyncRoutes.forEach((route)=>{
//         //判断route这个路由对象 是否在roles这个权限列表中
//         if( hasPermission( route , roles ) ){ //route路由对象 有权限
//             if( route.children && route.children.length != 0 ){ //route路由对象有子路由
//                 route.children = filterRoutes( route.children , roles ) //过滤出子路由中有权限的路由
//             }
//             accessRoutes.push( { ...route, component: ()=>import(route.component) } )
//         }
//     })
//     return accessRoutes;
// }

//判断 route 这个路由对象 是否在 roles 这个权限列表中
//参数一: route 路由对象  { path:'',component:'',meta:{ role:'home' } }
//参数二: roles 用户的权限列表  ['home','contact','order','a']
//返回值: true 表示有权限 , false 表示没有权限
function hasPermission( route, roles ){ 
    if( route.meta && route.meta.role ){ //route这个路由对象 需要权限
        return roles.some((item)=>{ 
            return item == route.meta.role;
        });
    }else{ //不需要权限
        return true;
    }
}

export default filterRoutes;